%macro FUNCTION 1
global _%1
_%1:
 .begin:
%endmacro

%macro RegisterISR 1
align 0x10
global _ISR_%1
_ISR_%1:
	push	dword 0
	push	dword %1
	jmp		_ISR_Dispatcher
%endmacro

%macro RegisterISR_WithError 1
align 0x10
global _ISR_%1
_ISR_%1:
	push	dword %1
	jmp		_ISR_Dispatcher
%endmacro


FUNCTION ISR_Dispatcher
 extern _IDT_CallHandler
	cli
	pushad
	push		ds
	push		es
	push		gs
	push		fs
	push		ss
	push		esp
	
	mov			ax, 0x10
	mov			ds, ax
	mov			es, ax
	mov			fs, ax
	mov			gs, ax
	jmp			0x08:.next

 .next:
 	call		_IDT_CallHandler

 .done:
 	add			esp, 0x04
	pop			ss
	pop			fs
	pop			gs
	pop			es
	pop			ds
	popad
	add			esp, 0x08
	sti
	iret

RegisterISR 0
RegisterISR 1
RegisterISR 2
RegisterISR 3
RegisterISR 4
RegisterISR 5
RegisterISR 6
RegisterISR 7
RegisterISR_WithError 8
RegisterISR 9
RegisterISR_WithError 10
RegisterISR_WithError 11
RegisterISR_WithError 12
RegisterISR_WithError 13
RegisterISR_WithError 14
RegisterISR 15
RegisterISR 16
RegisterISR 17
RegisterISR 18
RegisterISR 19
RegisterISR 20
RegisterISR 21
RegisterISR 22
RegisterISR 23
RegisterISR 24
RegisterISR 25
RegisterISR 26
RegisterISR 27
RegisterISR 28
RegisterISR 29
RegisterISR 30
RegisterISR 31
RegisterISR 32
RegisterISR 33
RegisterISR 34
RegisterISR 35
RegisterISR 36
RegisterISR 37
RegisterISR 38
RegisterISR 39
RegisterISR 40
RegisterISR 41
RegisterISR 42
RegisterISR 43
RegisterISR 44
RegisterISR 45
RegisterISR 46
RegisterISR 47
RegisterISR 48
RegisterISR 49
RegisterISR 50
RegisterISR 51
RegisterISR 52
RegisterISR 53
RegisterISR 54
RegisterISR 55
RegisterISR 56
RegisterISR 57
RegisterISR 58
RegisterISR 59
RegisterISR 60
RegisterISR 61
RegisterISR 62
RegisterISR 63
RegisterISR 64
RegisterISR 65
RegisterISR 66
RegisterISR 67
RegisterISR 68
RegisterISR 69
RegisterISR 70
RegisterISR 71
RegisterISR 72
RegisterISR 73
RegisterISR 74
RegisterISR 75
RegisterISR 76
RegisterISR 77
RegisterISR 78
RegisterISR 79
RegisterISR 80
RegisterISR 81
RegisterISR 82
RegisterISR 83
RegisterISR 84
RegisterISR 85
RegisterISR 86
RegisterISR 87
RegisterISR 88
RegisterISR 89
RegisterISR 90
RegisterISR 91
RegisterISR 92
RegisterISR 93
RegisterISR 94
RegisterISR 95
RegisterISR 96
RegisterISR 97
RegisterISR 98
RegisterISR 99
RegisterISR 100
RegisterISR 101
RegisterISR 102
RegisterISR 103
RegisterISR 104
RegisterISR 105
RegisterISR 106
RegisterISR 107
RegisterISR 108
RegisterISR 109
RegisterISR 110
RegisterISR 111
RegisterISR 112
RegisterISR 113
RegisterISR 114
RegisterISR 115
RegisterISR 116
RegisterISR 117
RegisterISR 118
RegisterISR 119
RegisterISR 120
RegisterISR 121
RegisterISR 122
RegisterISR 123
RegisterISR 124
RegisterISR 125
RegisterISR 126
RegisterISR 127
RegisterISR 128
RegisterISR 129
RegisterISR 130
RegisterISR 131
RegisterISR 132
RegisterISR 133
RegisterISR 134
RegisterISR 135
RegisterISR 136
RegisterISR 137
RegisterISR 138
RegisterISR 139
RegisterISR 140
RegisterISR 141
RegisterISR 142
RegisterISR 143
RegisterISR 144
RegisterISR 145
RegisterISR 146
RegisterISR 147
RegisterISR 148
RegisterISR 149
RegisterISR 150
RegisterISR 151
RegisterISR 152
RegisterISR 153
RegisterISR 154
RegisterISR 155
RegisterISR 156
RegisterISR 157
RegisterISR 158
RegisterISR 159
RegisterISR 160
RegisterISR 161
RegisterISR 162
RegisterISR 163
RegisterISR 164
RegisterISR 165
RegisterISR 166
RegisterISR 167
RegisterISR 168
RegisterISR 169
RegisterISR 170
RegisterISR 171
RegisterISR 172
RegisterISR 173
RegisterISR 174
RegisterISR 175
RegisterISR 176
RegisterISR 177
RegisterISR 178
RegisterISR 179
RegisterISR 180
RegisterISR 181
RegisterISR 182
RegisterISR 183
RegisterISR 184
RegisterISR 185
RegisterISR 186
RegisterISR 187
RegisterISR 188
RegisterISR 189
RegisterISR 190
RegisterISR 191
RegisterISR 192
RegisterISR 193
RegisterISR 194
RegisterISR 195
RegisterISR 196
RegisterISR 197
RegisterISR 198
RegisterISR 199
RegisterISR 200
RegisterISR 201
RegisterISR 202
RegisterISR 203
RegisterISR 204
RegisterISR 205
RegisterISR 206
RegisterISR 207
RegisterISR 208
RegisterISR 209
RegisterISR 210
RegisterISR 211
RegisterISR 212
RegisterISR 213
RegisterISR 214
RegisterISR 215
RegisterISR 216
RegisterISR 217
RegisterISR 218
RegisterISR 219
RegisterISR 220
RegisterISR 221
RegisterISR 222
RegisterISR 223
RegisterISR 224
RegisterISR 225
RegisterISR 226
RegisterISR 227
RegisterISR 228
RegisterISR 229
RegisterISR 230
RegisterISR 231
RegisterISR 232
RegisterISR 233
RegisterISR 234
RegisterISR 235
RegisterISR 236
RegisterISR 237
RegisterISR 238
RegisterISR 239
RegisterISR 240
RegisterISR 241
RegisterISR 242
RegisterISR 243
RegisterISR 244
RegisterISR 245
RegisterISR 246
RegisterISR 247
RegisterISR 248
RegisterISR 249
RegisterISR 250
RegisterISR 251
RegisterISR 252
RegisterISR 253
RegisterISR 254
RegisterISR 255
